package main

import (
	"log/slog"
	"os"
	"os/signal"
	"rule/cache"
	"rule/data"
	"rule/pkg/gwprop"
	"rule/pkg/log"
	"rule/util"
	"syscall"
)

func main() {
	interrupt := make(chan os.Signal, 2)
	signal.Notify(interrupt, syscall.SIGINT, syscall.SIGTERM)

	work()

	// 订阅 系统程序的 退出
	for {
		select {
		case tmp, _ := <-interrupt:
			// 释放 redis 等
			// util.CloseRedis()
			slog.Error("程序关闭", "interrupt", tmp)
			os.Exit(0)
		}
	}

}

func work() {
	log.Setup()
	// 加载网关prop文件的数据，网关信息
	gwprop.InitProp()
	slog.Info("程序启动_rule")
	// 初始化全局变量
	data.Setup()
	// 初始化redis, 死等待
	cache.Setup()
	// 加载现有规则,并且处理 初始化现有redis里面队列
	util.ProcessRule()
	// 一定要规则加载完成, 才能处理延迟任务
	data.LoadDelayTask()

	// 加载规则成功后才能,读取redis
	// 加载 redis
	util.SubscribeRedis()

}
